perm filename PARTX.OLD[MSS,LCS]1 blob sn#178140 filedate 1975-09-20 generic text, type T, neo UTF8
00100	C THIS AIDS IN EXTRACTING PARTS FROM SCORES. LOAD WITH MSFAIL.FAI
00200		COMMON/STF/RSTFAC(-3/4),RSTJ2 /XXX/LK,LP,JY
00300		COMMON/XRN/RN(2000)
00400		COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
00500		COMMON/POSI/STFF(-3/4),JJ2,PQ/PTR/PWDS(250),L,LL,I,IX
00600	      DIMENSION IV(78),LIST(200),XLAST(4)
00700		1,XWDS(150)
00800	C**** RN MIGHT HAVE TO BE 4000 ******
00900		COMMON /PX/POS,SX,PN(2000),Q(10000)
01000		DATA FIB/.5/
01100		EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
01200		1,(R8,RQ(6)),(R9,RQ(7)),(RQ(10),XLFT),(LIST,IV)
01300	C  RQ(2) IS R4, RQ(3) IS R5 ETC.
01400	
01410		XSIG=FIB
01420		CLEF=FIB
01440		ENDLN=0
01450		KQ=0
01500	14	JT=0
01600		JR=0
01700		REWIND 1
01800	1	FORMAT(' TYPE OUTPUT FILE NAME  ',$)
01900		TYPE 1
02000		ACCEPT 2,NAMX
02100	213	IF(LOOKD(NAMX).GE.0)GO TO 13
02200		TYPE 88,NAMX
02300		ACCEPT 2,L
02400		IF(L.EQ.'N')GO TO 14
02500	88	FORMAT(' WRITE OVER FILE ',A5,'????  '$)
02600	13	XWDS(1)=1
02610		NAMEQ=NAMX
02700		JRH=0 
02800	C  FOR REST COLLECTION
02900		IF(JT.EQ.0)RM=0
03000		L=1
03400		LK=1
03500		IF(JT.NE.0)GO TO 87
03600	CJ44	FORMAT(' TYPE TOP OUTPUT STAFF #  ',$)
03700	CJ	TYPE 44
03800	CJ	ACCEPT 5,RS
03900	CJ	RSX=RS
04000		RS=3
04100	C  SAVE UPPER STAFF NUM FOR NEXT FILE.
04200	C***	TYPE 144
04300	144	FORMAT(' STAFF SIZE = '$)
04400	C***	ACCEPT 5,STFSZ
04450		STFSZ=.9
04500	C  NON-ZERO STFSZ WILL CHANGE P5 IN ALL USED STAVES.
04600	10	IF(JT.EQ.0)GO TO 83
04700	87	NAME=NAME+2
04800		GO TO 84
04900	86	FORMAT(1XA5)
05000	3	FORMAT(' TYPE INPUT NAME, (CONT), (NOBAR)  ',$)
05100	C***83	TYPE 3
05200	C***	ACCEPT 2,NAME,JT,NBAR
05250	83	NAME='ZZZZA'
05275		JT=1
05300	C  TYPE ANY NUMBER AFTER NAME AND IT WILL GO TO NEXT LETTER IN ALPH.
05400		NAMZ=NAME
05500		IF(NBAR.NE.0)NBAR=-1
05600	C  ANY THIRD NUM. SUPPRESSES SCORE BARLINE FEATURE
05800	84	IF(LOOKD(NAME))GO TO 284
05900		NAME=NAMZ+256
06000		IF(LOOKD(NAME).GE.0)GO TO 20
06100		NAMZ=NAME
06200	C  FOUND NO MORE TO READ
06300	284	TYPE 86,NAME
06400		JZ=0
06500		IF(RM.NE.0)GO TO 77
06600		RM=-1
06700	4	FORMAT(' TYPE INST NAME, (RESPC?) '$)
06800		TYPE 4
06900		ACCEPT 2,RNAM,NRS
07000	C  TYPE ANY NUM AFTER INS. NAME TO STOP RHYTH RESPACING.
07100		IF(RNAM.GT.0)REREAD 5,SN
07200		IF(INM.EQ.'99')GO TO 20
07300	CC	K=SN/100.
07400		TYPE 46
07500	46	FORMAT(' TRANS. NUM. -- '$)
07600		ACCEPT 5,TR
07700	C  TRANSPOSITION BY STEPS
07800		IF(TR.GE.99)GO TO 83
07900	77	REWIND 21
08000	177	CALL IFILE(21,NAME)
08700	C  LP IS START OF RN ARRAY THIS TIME
08800		READ(21),ITEM,I,
08900		1 (PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,(IV(K),K=1,ISCR),
09000		1 LCNT,(LIST(K),K=1,LCNT),RSTFAC,STFF
09100		DO 45 K=1,ITEM
09200		J=PWDS(K)
09300		IF(RN(J+1).NE.8)GO TO 45
09400		IF(RNAM)GO TO 145
09500		IF(RN(J+2).EQ.SN)GO TO 8 
09600		GO TO 45
09700	145	R9=RN(J+9)
09800		TYPE 86,R9
09900		IF(R9.NE.RNAM)GO TO 45
10000		SN=RN(J+2)
10010		XLFT=RN(J+3)
10020	C LEFT LIMIT OF STAFF
10030		ZLFT=XLFT+.5
10040	C FOR FIRST BAR LINES.
10100		IF(STFSZ.EQ.0)STFSZ=RSTFAC(IFIX(SN))
10200	C  FOUND THE STAFF
10300		GO TO 8
10400	45	CONTINUE
10700		TYPE 16
10800	16	FORMAT(' INST. NOT FOUND'/)
10900		GO TO 10
11000	8	SIG=200
11100	C  FOR TRANSP. SECTION.
11200		RN(J+8)=0
11300	C REMOVES VERTICAL SPACER, IF ANY
11310		IF(RS.EQ.0)RN(J+8)=2.95
11320	C  PUTS ONE IN IF THIS IS LAST ONE FOR THIS FILE.
11360	
11400		DO 6 K=1,ITEM
11500		J=PWDS(K)
11600		R=RN(J+1)
11700		IF(R.NE.10)GO TO 800
11800		IF(RN(J).LT.4)GO TO 80
11900		IF(RN(J+6).GT.1.3)GO TO 6
12000	C  SKIPS PAGE NUMS. (I.E. BIG SIZE)
12100		IF(RN(J).LT.6)GO TO 80
12200	C  FOUND A NUM. IN BOX ↓↓
12300	2182	RN(J+2)=SN
12400		GO TO 81
12500	800	IF(R.NE.4)GO TO 80
12600		IF(NBAR)GO TO 80
12700		IF(RN(J).NE.2)GO TO 182
12800	C  FOUND A BAR LINE
12810		IF(RN(J+3).LT.ZLFT)GO TO 6
12820	C DROPS BAR LINE AT LEFT OF STAFF.
12900		KZ=RN(J+4)/100.
13000		RN(J+4)=1.+KZ*100.
13100	C  KZ IS FOR THICK BARS.
13200		RR=RN(J+3)
13300		DO 82 KY=K+1,ITEM
13400		KZ=PWDS(KY)
13500		IF(RN(KZ+1).NE.4)GO TO 82
13600		IF(RN(KZ).NE.2)GO TO 82
13700	C  AVOIDS DUPLICATE BARS.
13800		IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82	
13900		RN(KZ+2)=99
14000		RN(KZ+1)=0
14100	82	CONTINUE
14200		GO TO 81
14300	182	IF(RN(J).LT.5)GO TO 80
14400		IF(RN(J+7).GE.3)GO TO 6
14500	C  SKIP HEAVY BRACKETS.
14600	80	IF(RN(J+2).NE.SN)GO TO 6
14610		IF(R.NE.3)GO TO 3801
14620		RR=RN(J+5)
14630		IF(RN(J).LT.3)RR=0
14640		IF(RR.EQ.CLEF)GO TO 6
14650	C SKIP DUPLICATE CLEFS.
14660		IF(RR.LE.3)CLEF=RR
14670		GO TO 1800
14675	3801	IF(R.NE.17)GO TO 3800
14680		IF(RN(J+5).EQ.XSIG)GO TO 6
14690		XSIG=RN(J+5)
14700	C SKIPS DUPL. KEY SIGS.
14810	3800	IF(R.EQ.8)GO TO 6
14820	C  OMIT ALL STAVES FOR NOW
14830	1800	IF(RN(J+3).LT.XLFT)GO TO 6
14840	C OMIT SOME THINGS TO LEFT OF STAFF BEGINNING.
15900	81	JA=PWDS(K+1)
15910		RN(J+2)=RS
16000		DO 7 KY=J,JA-1
16100		PN(LK)=RN(KY)
16200	7	LK=LK+1
17000		L=L+1
17200		XWDS(L)=LK
17300	6	CONTINUE
17400	
17600	C***17	IF(NRS.NE.0)GO TO 200
17700	C******↓↓↓↓↓↓ RHYTH RESET ↓↓↓↓↓↓↓↓
18100		I=1
18200		DO 243 K=1,L-1
18300		LB=XWDS(K)+1
18400		IF(PN(LB).NE.16)GO TO 243
18500		IF(PN(LB-1).LT.8)GO TO 243
18600		JL=XWDS(K-1)
18700	244	PN(LB+2)=PN(JL+3)
18800	C PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
18900	C  FOR SPACING PROBLEMS BELOW.
19000	243	CONTINUE
19050		M=2
19075		J=1
19100	24	RA=100000.
19200	C  POSITION
19300		DO 21 K=1,L-1
19400		JL=XWDS(K)+3
19500		R=PN(JL)
19600		IF(R.EQ.100000)GO TO 21
20100	241	IF(ABS(R-RA).GT..1)GO TO 240
20200		R=RA
20300		PN(JL)=R
20400	C  PUT IN HERE MULTI-VOICE TRAP
20500		GO TO 21
20600	240	IF(R.GT.RA)GO TO 21
20700	C  LINES THEM UP
20800		I=K
20900		RA=R
21000	21	CONTINUE
21100		IF(RA.EQ.100000)GO TO 23
21200	C  JUMP IF ALL SORTED
21300	242	JL=XWDS(I)
21400		LA=JL
21500		N=PN(JL)+3
21600	C  NEXT POINTER
21700		PWDS(M)=PWDS(M-1)+N
21800		M=M+1
21900		DO 22 K=J,J+N-1
22000		RN(K)=PN(JL)
22100	22	JL=JL+1
22200		PN(LA+3)=100000
22300	C  PUT IT ASIDE
22310		J=N+J
22315		GO TO 24
22320	23	IF(ENDLN.EQ.0)GO TO 2334
22340		R4=0
22350		R5=1000
22360		R7=RS
22370		R8=ENDLN
22380		R9=0
22390		CALL PTMOVE(RN,PWDS)
22510	2334	DO 32 K=1,IFIX(PWDS(L))-1
22520		KQ=KQ+1
22530	32	Q(KQ)=RN(K)
22535		ENDLN=ENDLN+200
22540		L=1
22560		LK=1
22570		GO TO 10
22580	
42810	20	K=1
42820		KK=1
42830	220	JJ=Q(K)+3
42840		PN(KK)=K
42850	C NEW POINTER
42860		K=K+JJ
42870		KK=KK+1
42880		IF(K.LT.KQ)GO TO 220
42890		PN(KK)=K
42900		L=KK
42907	C  DELETES EXTRA BAR LINES, ETC.
42910		CALL RESTS
42920	C  FROM NOW ON ALL CODES #-1 ARE IGNORED, RESTS HAVE BEEN COMBINED.
42930		K=1
42940		L=1
42950		LL=0
42960		LK=1
42970	221	IF(Q(IFIX(PN(K))+1))GO TO 321
42980		DO 421	 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
42990		LL=LL+1
43000	421	Q(LL)=Q(KL)
43010		LK=LK+1
43020		PN(LK)=LL+1
43030	321	K=K+1
43040		IF(K.LT.KK)GO TO 221
43045		L=LK-1
43047	C  L=NUMBER OF ITEMS FOR RHY RECONS.
43200	123	LB=1 
43214		JFST=0
43228		POS=0
43242		R5X=0
43256	C  NEXT RECONSTITUTES RHYTHM
43270	25	N=PN(LB)
43284		R=Q(N+1)
43298		IF(TR.EQ.0)GO TO 51
43312		IF(R.EQ.1)GO TO 52
43326		IF(R.EQ.5)GO TO 52
43340		IF(R.EQ.6)GO TO 52
43354		IF(R.EQ.17)GO TO 117
43368	51	JR=0
43382		IF(R.LE.4)GO TO 430
43396		IF(R.LT.17)GO TO 30
43410	C LOOKS FOR 17 AND 18, KSIG AND METER.
43424	430	IF(R.NE.1)GO TO 230
43438		IF(Q(N).LT.7)GO TO 630
43452		IF(Q(N+9))GO TO 30
43466	C SKIPS NON-LEDGER LINE NOTES.
43480		GO TO 130
43494	630	JR=-1
43508		GO TO 130
43522	C  LOOK ONLY AT NOTES AND RESTS AND NON-DOUBLE STOPS, AND BARS,CLEFS
43536	230	IF(R.NE.2)GO TO 130
43550		IF(Q(N).LT.5)JR=-1
43564	C JUMP IF NO RHYTH VALUE FOUND IN P7 (P9 FOR NOTES)
43578	130	IF(RCLEF(Q(N)))GO TO 30
43592	CJ SKIPS NON-CLEFS
43606		S=Q(N+3)
43620		LA=LB
43634	26	LA=LA+1
43648		IF(LA.GE.L)GO TO 30
43662	C  FIND NEXT IMPORTANT ITEM
43676		NA=PN(LA)
43690		RR=Q(NA+1)
43704		IF(RR.LE.4)GO TO 134
43718		IF(RR.LT.17)GO TO 26
43732	134	IF(RR.NE.4)GO TO 34
43746		IF(Q(NA).NE.2)GO TO 26
43760	C  USES ONLY NOTES, RESTS, BARS, CLEFS
43774	34	IF(RCLEF(Q(NA)))GO TO 26
43788	CJ SKIPS NON-CLEFS
43802		RX=Q(NA+3)
43816	C  POSITION OF NEXT ITEM
43830		IF(S.EQ.RX)GO TO 26
43844		IF(R.LT.3)GO TO 235
43858		IF(R.GE.17)P=4.
43872	C  PUT IN FOR LARGE KSIGS LATER.
43886		IF(R.EQ.4)P=2.
43900		IF(R.EQ.3)P=6.
43914		IF(Q(NA+5).GE.100.)P=5.
43928	C SPACE FOR BARS, KSIG, METERS, CLEFS (LAST FOR MINI-CLEF)
43942		IF(RR.EQ.17)P=P+3.
43956	C  IF NEXT(RR) IS KSIG, ADD SPACE.
43970		GO TO 335
43984	235	K=9
43998		IF(R.EQ.2)K=7
44012		P=Q(N+K)
44026		IF(JR)P=1
44040	C  ASSUMES QUARTER VALUE IF NON WAS GIVEN
44054		P=P+(.125-P)*FIB
44068	135	P=P*15.
44082	C  FINDS RHYTH IN P9 OR P7(REST)
44096	C  IF DIFFERENT SIMULTANEOUS RHYTHMS, ZERO OUT LARGER BEFORE HAND.
44110		IF(P)GO TO 30
44124	C  SKIPS NOTES WITH SUPPRESSED LEDGER LINES.
44138	335	SX=S+P-RX
44152		IF(SX.EQ.0)GO TO 30
44166		R5X=R5X+SX
44180	C  SPACE DIFFERENCE
44194	
44208		LL=0
44222		R7=RS
44236		IF(SX)GO TO 29
44250	2900	R4=RX
44264		R5=100000  
44278		R8=SX
44292		R9=0
44306	C  ADJUST REST OF LINE
44320		CALL PTMOVE(Q,PN)
44334		IF(SX)GO TO 30
44348	29	R4=S
44362		R5=RX
44376		R8=S
44390		R9=RX+SX
44404	C  ADJUST STUFF BETWEEN POINTS
44418		CALL PTMOVE(Q,PN)
44432		IF(SX)GO TO 2900
44446	
44460	30	LB=LB+1
44474		IF(LB.LT.L)GO TO 25
44488	C  GO BACK IF MORE SPACING TO DO
44502		P8=0
44516		LL=0
44530	C***	IF(XLFT.EQ.0)GO TO 600
44544	C  NEXT MOVES LEFT SIDE OF STAFF TO ZERO
44558		R5=10000.
44572		R7=RS
44586		R8=-XLFT
44600		R4=-101
44614		R9=0
44628		CALL PTMOVE(Q,PN)
44642		CALL LINELN(STFSZ)
44656	C  BREAKS IT UP INTO LINES.
44670	C***** NEXT IS TEMPORARY
44684		J=1
44698		CALL OFILE(1,NAMX)
44712		LL=PN(L+1)
44726	2929	WRITE(1),L,LL,
44740		1 (PN(K),K=1,L+1),(Q(K),K=1,LL-1),J,J,J,J,RSTFAC,STFF,IV,STFF
44754		STOP
44800	2	FORMAT(A5,2I)
44900	5	FORMAT(5F)
45000	
45100	
45200	52	A=Q(N+4)
45300		Q(N+4)=A+TR
45400	C TRANSPOSES ONLY BY STAFF STEPS FOR NOW
45500		X=Q(N+5)
45600		IF(Q(N+1).EQ.1)GO TO 11
45700	C  COULD ADD STEM REVERSE HERE.
45800		Q(N+5)=X+TR
45900		GO TO 51
46000	11	A=AMOD(A,100.)
46100		IF(TR.NE.4)GO TO 1101
46200		IF(AMOD(A,7.0).EQ.0)GO TO 101
46300	1101	IF(AMOD(TR-1.0,7.0).NE.0)GO TO 51
46400	C  NEXT IS FOR Bb TRANSP.
46500		B=AMOD(A+7.0,7.0)
46600		IF(B.EQ.0)GO TO 101
46700		IF(B.NE.3)GO TO 51
46800	C  FINDS ORIG. E OR B
46900	101	M=AMOD(X,10.0)
47000	C  FINDS ACCID.
47100		X=X-M
47200	C  STEM DIR. AND DECI.
47300		B=3.
47400	C CHANGES FLAT TO NATURAL SIGN.
47500		IF(M.NE.0)GO TO 118
47600		IF(SIG.NE.200)GO TO 51
47700	C  GO BACK IF A KEY SIG. IS PRESENT
47800	118	IF(M.EQ.3)B=2
47900	C  NO PROVISION YET FOR ## OR bb
48000	2101	Q(N+5)=X+B
48100		GO TO 51
48200	117	SIG=Q(N+5)
48300		IF(TR.EQ.1)SIG=SIG+2
48400		IF(TR.EQ.4)SIG=SIG+1
48500	C CHANGE KSIG FOR Bb AND F INSTS.  ADD CHECK-UP ABOVE LATER.
48600	C  MAKES NATURALS IF CHANGED TO NO KSIG (I.E. =0)
48700		IF(SIG.NE.0)GO TO 217
48800		IF(TR.EQ.1)SIG=-102
48900		IF(TR.EQ.3)SIG=-101
49000	217	Q(N+5)=SIG
49100		GO TO 51
49200		END